package com.rzico.basics.amap.pojo.request;

/**
 * Created by lam on 2018/8/10.
 */
public class GeoCodeRequest {

    /**
     * 高德key
     */
    private String key;

    /**
     * 结构化地址信息
     * 规则遵循：国家、省份、城市、区县、城镇、乡村、街道、门牌号码、屋邨、大厦，
     * 如：北京市朝阳区阜通东大街6号。
     * 如果需要解析多个地址的话，请用"|"进行间隔，并且将 batch 参数设置为 true，
     * 最多支持 10 个地址进进行"|"分割形式的请求。
     */
    private String address;

    /**
     * 指定查询的城市
     * 可选输入内容包括：
     * 指定城市的中文（如北京）、
     * 指定城市的中文全拼（beijing）、
     * citycode（010）、
     * adcode（110000）。
     * 当指定城市查询内容为空时，会进行全国范围内的地址转换检索。
     */
    private String city;

    /**
     * 经纬度坐标
     * 传入内容规则：经度在前，纬度在后，经纬度间以“,”分割，经纬度小数点后不要超过 6 位。
     * 如果需要解析多个经纬度的话，请用"|"进行间隔，
     * 并且将 batch 参数设置为 true，最多支持传入 20 对坐标点。每对点坐标之间用"|"分割。
     */
    private String location;

    /**
     * 返回附近POI类型
     * 以下内容需要 extensions 参数为 all 时才生效。
     * <p>
     * 逆地理编码在进行坐标解析之后不仅可以返回地址描述，也可以返回经纬度附近符合限定要求的POI内容（在 extensions 字段值为 all 时才会返回POI内容）。
     * 设置 POI 类型参数相当于为上述操作限定要求。
     * 参数仅支持传入POI TYPECODE，可以传入多个POI TYPECODE，相互之间用“|”分隔。
     * 该参数在 batch 取值为 true 时不生效。
     */
    private String poitype;

    /**
     * 搜索半径
     * radius取值范围在0~3000，默认是1000。单位：米
     */
    private String radius;

    /**
     * 返回结果控制
     * extensions 参数默认取值是 base，也就是返回基本地址信息；
     * <p>
     * extensions 参数取值为 all 时会返回基本地址信息、附近 POI 内容、道路信息以及道路交叉口信息。
     */
    private String extensions = "all";

    /**
     * 批量查询控制
     * batch 参数设置为 true 时进行批量查询操作，最多支持 10 个地址进行批量查询。
     * <p>
     * batch 参数设置为 false 时进行单点查询，此时即使传入多个地址也只返回第一个地址的解析查询结果。
     */
    private Boolean batch;

    /**
     * 道路等级
     * 以下内容需要 extensions 参数为 all 时才生效。
     * <p>
     * 可选值：0，1
     * 当roadlevel=0时，显示所有道路
     * 当roadlevel=1时，过滤非主干道路，仅输出主干道路数据
     */
    private Integer roadlevel = 0;

    /**
     * 数字签名
     */
    private String sig;

    /**
     * 返回数据格式类型
     */
    private String output = "JSON";

    /**
     * 是否优化POI返回顺序
     * 以下内容需要 extensions 参数为 all 时才生效。
     * <p>
     * homeorcorp 参数的设置可以影响召回 POI 内容的排序策略，目前提供三个可选参数：
     * <p>
     * 0：不对召回的排序策略进行干扰。
     * <p>
     * 1：综合大数据分析将居家相关的 POI 内容优先返回，即优化返回结果中 pois 字段的poi顺序。
     * <p>
     * 2：综合大数据分析将公司相关的 POI 内容优先返回，即优化返回结果中 pois 字段的poi顺序。
     */
    private Integer homeorcorp;

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public String getPoitype() {
        return poitype;
    }

    public void setPoitype(String poitype) {
        this.poitype = poitype;
    }

    public String getRadius() {
        return radius;
    }

    public void setRadius(String radius) {
        this.radius = radius;
    }

    public String getExtensions() {
        return extensions;
    }

    public void setExtensions(String extensions) {
        this.extensions = extensions;
    }

    public Boolean getBatch() {
        return batch;
    }

    public void setBatch(Boolean batch) {
        this.batch = batch;
    }

    public Integer getRoadlevel() {
        return roadlevel;
    }

    public void setRoadlevel(Integer roadlevel) {
        this.roadlevel = roadlevel;
    }

    public String getSig() {
        return sig;
    }

    public void setSig(String sig) {
        this.sig = sig;
    }

    public String getOutput() {
        return output;
    }

    public void setOutput(String output) {
        this.output = output;
    }

    public Integer getHomeorcorp() {
        return homeorcorp;
    }

    public void setHomeorcorp(Integer homeorcorp) {
        this.homeorcorp = homeorcorp;
    }

    public String geoToString() {
        String params = "key=" + this.key + "&address=" + this.address;
        if (this.city != null) {
            params += "&city=" + this.city;
        }
        return params;
    }

    public String reGeoToString() {
        String params = "key=" + this.key + "&location=" + this.location;
        if (this.poitype != null) {
            params += "&poitype=" + this.poitype;
        }
        if (this.radius != null) {
            params += "&radius=" + this.radius;
        }
        if (this.extensions != null) {
            params += "&extensions=" + this.extensions;
        }
        if (this.batch != null) {
            params += "&batch=" + this.batch;
        }
        if (this.roadlevel != null) {
            params += "&roadlevel=" + this.roadlevel;
        }
        return params;
    }

}
